package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DB {
    // 单例模式
    /*
     * 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。
     * 通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问，从而方便对实例个数的控制并节约系统资源。
     * 如果希望在系统中某个类的对象只能存在一个，单例模式是最好的解决方案。
     */
    private static com.util.DB db;// 保证整个系统中只存在DB的一个对象db

    static {// 当使用该类时首先执行static中的语句
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private DB() {
    }// 单例模式不允许其他类创建对象

    public static Connection getConn() {
        Connection conn = null;
        String url = "jdbc:mysql://localhost:3306/bhsycase?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
        // 数据库连接，oracle代表链接的是oracle数据库；thin:@10.218.49.217代表的是数据库所在的IP地址；
        // 1521代表链接数据库的端口号；KTSC代表的是数据库名称
        String UserName = "root";// 数据库用户登陆名
        String Password = "123";// 密码
        try {
            conn = DriverManager.getConnection(url, UserName, Password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }

    public static void closeConn(Connection conn) {
        try {
            if (conn != null) {
                conn.close();
                conn = null;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static PreparedStatement getPstmt(Connection conn, String sql) {
        PreparedStatement pstmt = null;
        try {
            pstmt = conn.prepareStatement(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return pstmt;
    }

    public static void closePstmt(PreparedStatement pstmt) {
        try {
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
